#include<stdio.h>

/*
真题练习
    定义一个二维数组
    利用索引遍历数组中全部元素
    尝试使用指针遍历数组
    定义多个数组，然后放入大数组中
    分别是用索引和指针遍历数组
*/

int main()
{
    int arr1[3][5] = {
        {1,2,3,4,5},
        {11,22,33,44,55},
        {111,222,333,444,555}
    };

    /*
    arr[0]:表示二维数组中的第一组数据：{1,2,3,4,5}；
    arr[1]:表示二维数组中的第二组数据：{11,22,33,44,55}；
    arr[2]:表示二维数组中的第三组数据：{111,222,333,444,555}；
    */

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("%d ",arr1[i][j]);
        }
        printf("\n");
    }
    printf("使用索引打印数组完毕\n");

    int (*p)[5] = arr1;

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("%d ",*(*p+j));
        }
        printf("\n");
        p++;
    }
    printf("使用指针打印数组完毕\n");

    int arr_1[3] = {1,2,3};
    int arr_2[5] = {1,2,3,4,5};
    int arr_3[9] = {1,2,3,4,5,6,7,8,9};

    int len1 = sizeof(arr_1) / sizeof(int);//因为使用数组名进行计算的时候，退化成第一个元素的指针，此时便不能代表数组这个整体了
    int len2 = sizeof(arr_2) / sizeof(int);
    int len3 = sizeof(arr_3) / sizeof(int);
    int LenArr[3] = {len1,len2,len3};

    int *arr2[3] = {arr_1,arr_2,arr_3};

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < LenArr[i]; j++)
        {
            printf("%d ",arr2[i][j]);
        }
        printf("\n");
    }
    printf("使用索引打印数组完毕\n");

    int **p2 = arr2;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < LenArr[i]; j++)
        {
            printf("%d ",*(*p2+j));
        }
        printf("\n");
        p2++;
    }
    printf("使用指针打印数组完毕\n");

    return 0;
}